package com.letoo.sso.core.service;

import com.github.miemiedev.mybatis.paginator.domain.PageBounds;
import com.github.miemiedev.mybatis.paginator.domain.PageList;
import com.letoo.sso.dataaccess.datasource.DataSource;
import com.letoo.sso.dataaccess.domain.BaseDomain;

public interface BaseService<T extends BaseDomain> {
    /**
     * 根据id找到对应的DO对象
     * 
     * @param id
     * @return
     */
    @DataSource(value = "slave")
    T findById(long id);

    /**
     * 更新数据
     * 
     * @param t
     */
    @DataSource(value = "master")
    void update(T t);

    /**
     * 创建新纪录,返回对应的id
     * 
     * @param entity
     * @return
     */
    @DataSource(value = "master")
    Long save(T entity);

    /**
     * 根据id删除记录
     * 
     * @param ids
     *            多个id以半角英文逗号分隔 如;1,2,3
     */
    @DataSource(value = "master")
    void delete(String ids);

    /**
     * 查找指定的记录列表
     * 
     * @param filterRuleList
     *            需要过滤的查询条件
     * @param pageQuery
     * @return
     */
    @DataSource(value = "slave")
    PageList<T> findByPage(PageBounds pageBounds);

    /**
     * 查找指定的记录列表的总数
     * 
     * @param filterRuleList
     * @return
     */
    @DataSource(value = "slave")
    Integer getTotalCount();

}
